// package com.tfswx.jkgl.core;
//
// import lombok.SneakyThrows;
// import org.springframework.util.ResourceUtils;
//
// import javax.script.ScriptEngine;
// import javax.script.ScriptEngineManager;
// import java.io.File;
// import java.io.FileReader;
// import java.util.ArrayList;
// import java.util.List;
//
// /**
//  * @author ricky
//  * @date 2021/12/8
//  */
// public class TestClass {
//     static String sql = "insert into xtb(id) values('$replace('$uuid()','-','')')";
//     // static String sql = "insert into xtb(id,name) values('@id','@name')";
//
//     public static void main(String[] args) {
//         System.out.println(replace(sql));
//     }
//
//     @SneakyThrows
//     private static String replace(String sql) {
//         List<Integer> startIdxList = new ArrayList<>();
//         for (int i = 0; i < sql.length(); i++) {
//             if ('$' == sql.charAt(i)) {
//                 startIdxList.add(i);
//             }
//         }
//         ScriptEngine engine = new ScriptEngineManager().getEngineByName("Nashorn");
//         File file = ResourceUtils.getFile("classpath:js/sqlFn.js");
//         engine.eval(new FileReader(file));
//
//         System.out.println(engine.eval("$uuid()"));
//         System.out.println(engine.eval("$replace('abcbbb','b','d')"));
//
//         for (int i = startIdxList.size() - 1; i >= 0; i--) {
//             Integer startIdex = startIdxList.get(i);
//             int endIndex = getEndIndex(sql, startIdex);
//             String str1 = sql.substring(0, startIdex);
//             String fn = sql.substring(startIdex, endIndex);
//             String str2 = String.valueOf(engine.eval(fn));
//             String str3 = sql.substring(endIndex);
//             sql = str1 + str2 + str3;
//         }
//         return sql;
//     }
//
//     private static int getEndIndex(String str, int start) {
//         int cnt = 0;
//         for (int i = start; i < str.length(); i++) {
//             char c = str.charAt(i);
//             if (c == '(') {
//                 cnt++;
//             } else if (c == ')') {
//                 cnt--;
//                 if (cnt == 0) {
//                     return i + 1;
//                 }
//             }
//         }
//         throw new RuntimeException("sql解析异常");
//     }
// }
